package com.telit.android.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.telit.android.dto.AppTrackDTO;
import com.telit.android.dto.TrackInfoDTO;
import com.telit.common.util.HandleStrUtils;
import com.telit.common.util.RedisUtils;
import com.telit.common.util.TimeUtils;
import org.springframework.util.StringUtils;

import java.util.Date;


/**
 * @Auther zhouyu
 * @description 巡护信息工具类
 **/
public class PatrolInfoUtil {

    /**
     * 设置巡护相关信息
     * @param appTrackDTO
     * @param userId
     * @param id
     */
    public static void setDistantAndDurationAndPointCollection(AppTrackDTO appTrackDTO, Long userId, Long id) {
        if (StringUtils.isEmpty(appTrackDTO.getDistance()) || StringUtils.isEmpty(appTrackDTO.getDuration())
                || StringUtils.isEmpty(appTrackDTO.getPointCollection())) {
            // 从redis中获取数据
            TrackInfoDTO trackInfoDTO = getTrackInfoFromRedis(appTrackDTO, userId, id);
            if (trackInfoDTO != null) {
                appTrackDTO.setDistance(HandleStrUtils.handlerDistanceToKm(trackInfoDTO.getDistance()));
                appTrackDTO.setDuration(TimeUtils.secondsToFormat(trackInfoDTO.getDuration()));
                appTrackDTO.setPointCollection(trackInfoDTO.getPointCollection());
            }
        }else{
            // 转换时长和距离
//            appTrackDTO.setDuration(TimeUtils.secondsToFormat(appTrackDTO.getDuration()));
            appTrackDTO.setDistance(HandleStrUtils.handlerDistanceToKm(appTrackDTO.getDistance()));
        }
    }

    /**
     * 从redis中获取轨迹信息（时长,距离,点位集合）
     *
     * @return
     */
    public static TrackInfoDTO getTrackInfoFromRedis(AppTrackDTO appTrackDTO, Long userId, Long id) {
        String taskType = appTrackDTO.getTaskType();
        String type = getTaskType(taskType);
        if ("patrol".equals(type)) {
            //巡护
            Object appTrack = RedisUtils.getBoundHash(String.valueOf(id), String.valueOf(userId));
            TrackInfoDTO trackInfoDTO = null;
            if (appTrack != null) {
                trackInfoDTO = JSON.parseObject((String) appTrack, TrackInfoDTO.class);
            }
            return trackInfoDTO;
        }else if ("cruise".equals(type)){
            //TODO 巡航 对轨迹点格式进行转换
            Object appTrack = RedisUtils.getBoundHash(String.valueOf(id), String.valueOf(userId));
            TrackInfoDTO trackInfoDTO = null;
            if (appTrack != null) {
                trackInfoDTO = new TrackInfoDTO();
                trackInfoDTO.setPointCollection(JSONObject.toJSONString(appTrack));
            }
            return trackInfoDTO;
        }else {
            return null;
        }
    }

    public static  String getTaskType(String type){
        if ("1".equals(type)
                || "2".equals(type)
                || "3".equals(type)
                || "4".equals(type)
                || "5".equals(type)
                || "6".equals(type)
                || "13".equals(type)) {
            return "patrol";
        }else  if ("7".equals(type)
                || "8".equals(type)
                || "9".equals(type)
                || "10".equals(type)
                || "11".equals(type)
                || "12".equals(type)
                || "14".equals(type)) {
            return "cruise";
        }else {
            return "unknown";
        }
    }

    /**
     * 判断任务是否逾期
     * @param taskTime
     * @param executeTime
     * @return
     */
    public static boolean isDelay(Date taskTime,Date executeTime){
        return (executeTime != null && taskTime != null && executeTime.after(taskTime))
                || (executeTime == null && taskTime != null && taskTime.before(new Date()));
    }

}
